package collection;

import java.util.*;

public class CollectionTest {
    public static void main(String[] args) {
        //创建集合对象
        Collection<String> coll=new ArrayList<>();
        Collection<Integer> coll2=new HashSet<>();
        Collection<Double> coll3=new LinkedList<>();
        //add方法
        coll.add("one");
        coll.add("two");
        coll.add("three");
        //size方法
        int num=coll.size();//获取集合中元素的个数
        System.out.println(num);//3
        //isEmpty方法
        boolean b=coll.isEmpty();//判断集合是否为空
        System.out.println(b);//false
        System.out.println(coll);//[one, three]
        //clear方法
        coll.clear();//清空集合

        //remove方法
        //coll.remove("two");//删除集合中的元素
        //contains方法
        boolean b2=coll.contains("one");//判断集合中是否包含指定的元素
        System.out.println(b2);//true
        //集合中只能保存引用类型数据
        coll2.add(1);//自动装箱---------》Integer

        //集合与集合之间的方法
        //addAll方法 添加集合中的元素
        Collection<String> coll4=new ArrayList();
        coll4.add("jjjj");
        coll.addAll(coll4);//将coll4中的元素添加到coll中
        System.out.println(coll);//[one, three, jjjj]
        //containsAll方法 判断集合中是否包含指定集合的所有元素
        boolean b3=coll.containsAll(coll4);//判断coll4中的元素是否在coll中
        System.out.println(b3);//true
        //removeAll方法 删除集合中的交集
        coll.removeAll(coll4);
        System.out.println(coll);
        //retainAll方法 获取集合中的并集
        coll.retainAll(coll4);//获取coll和coll4的交集,赋值给coll，coll4不变
        //使用迭代器遍历集合
        //获取迭代器对象
        Iterator<String> it=coll.iterator();
        while (it.hasNext()){//判断集合中是否还有元素
            String str=it.next();//获取集合中的下一个元素
            System.out.println(str);
            if ("#".equals(str)){//迭代器遍历过程中不允许通过集合的方式来增删元素
                it.remove();//删除next()方法所获取的元素
            }
        }
        //增强for循环遍历集合
        for (String str:coll4){
            System.out.println(str);
        }
        //List接口的常用方法
        //ArraryList:内部使用数组来存储数据
        //LinkedList:内部使用链表来存储数据

        //get
        List<String> list=new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");
        System.out.println("list:"+list);
        String str1=list.get(0);
        System.out.println(str1);
        list.set(0,"#");
        System.out.println(list);
        String ole=list.set(0,"one");
        System.out.println(list);
        //add()
        list.add(0,"fuone");
        System.out.println(list);
        list.add(5,"futwo");
        //可以在集合中插入元素
        //remove()
        String s=list.remove(2);
        //删除下标为2的元素
        System.out.println(list);
        //subList
        //获取子集合
        //List<E> subList(int fromIndex, int toIndex);含头不含尾
        List<Integer> list2=new ArrayList<>();
        for (int i=0;i<10;i++){
            list2.add(i);
        }
        System.out.println("list2:"+list2);
        //截取集合3~7
        List<Integer> list3=list2.subList(3,8);
        System.out.println("list3:"+list3);
        //修改集合list3
        for (int i=0;i<list3.size();i++){
            list3.set(i,list3.get(i)*10);
        }
        System.out.println("list3:"+list3);

        //此时list3中的地址和list2中的地址一样，
        //修改list3中的元素，list2中的元素也会改变，反之同理
        //修改list2中的数据
        list2.set(3,1000);
        System.out.println("list2:"+list2);
        System.out.println("list3:"+list3);
        //但是不能够变换集合的引用地址，即不能够改变集合的长度
        list2.remove(0);
        System.out.println("list2:"+list2);
        //System.out.println("list3:"+list3);//编译错误
    }
}
